package org.codeart.composite.example02;

import java.util.ArrayList;
import java.util.List;

/**
 * 容器对象，表示文件夹
 */
public class Directory extends Entry {

    /**
     * 文件名称
     */
    private final String name;

    /**
     * 文件夹和文件的集合
     */
    private final List<Entry> dirs = new ArrayList<>();

    public Directory(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getSize() {
        int size = 0;
        // 遍历获取文件大小
        for (Entry dir : dirs) {
            size += dir.getSize();
        }
        return size;
    }

    @Override
    public Entry add(Entry entry) {
        dirs.add(entry);
        return this;
    }

    @Override
    public void list(String prefix) {
        System.out.println(prefix + "/" + this);
        for (Entry dir : dirs) {
            dir.list(prefix + "/" + name);
        }
    }
}
